// https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId=230&tqId=2021480&ru=/exam/oj&qru=/ta/dynamic-programming/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196

// 题干：给定一个长度为n的数组，接下来有q次查询, 每次查询有两个参数l, r.对于每个询问, 请输出al + al+1 + al+2 + ar
//      第一行包含两个整数n和q. 第二行包含n个整数a1 + a2 + a3 + ...an
//      接下来q行，每行包括两个整数l和r

// 示例 ：输入：
//      3 2
//      1 2 4
//      1 2
//      2 3
//      输出：
//      3
//      6

// 碎语：一维dp的模板题，从第一位开始计数u，避免分类讨论这种尴尬的情况出现

#include <iostream>
using namespace std;

const int N = 100010;
long long arr[N], dp[N];

int main()
{
    int n, q;
    cin >> n >> q;

    for (int i = 1 ; i < n + 1 ; i++) cin >> arr[i]; // 输入数据
    for (int i = 1 ; i < n + 1 ; i++) dp[i] = dp[i - 1] + arr[i]; // 前缀和数组

    while (q--){
        int l, r;
        cin >> l >> r;
        cout << dp[r] - dp[l - 1] << endl;
    }

    return 0;
}
